local ctxstatck = require 'vanilla.v.ctxstatck'

local cacheStack_M={}
local ctx=ngx.ctx

function cacheStack_M:sys_statck()
	return self:new('sys_statck')
end

function cacheStack_M:new(statck_name)
	if not ctx[statck_name] then
		local obj={
			name=statck_name,
			statcks={},
		}

		setmetatable(obj,{__index=self})
		ctx[statck_name]=obj
	end

	return ctx[statck_name]

end

function cacheStack_M:push(val)
	size=self:size()
	self.statcks[size+1]=val
end

function cacheStack_M:pop()
	local size = self:size()
	if size<1 then return nil end
	local element=self:get()
	table.remove(self.statcks,size);
	return element
end

function cacheStack_M:size()
	return #self.statcks
end

function cacheStack_M:get()
	local size = self:size()
	return self.statcks[size]
end

return cacheStack_M